The Data

The data used in this notebook is from the COVID-19 Data Repository by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University. The package used to retrieve data information can be found here.
Accessed dataset on: 2020-08-11

Preview of Dataset

data("coronavirus")
head(coronavirus)
coronavirus <- coronavirus %>%
  mutate(country = replace(country, country == "US", "United States"))

# Fill empty province with NA
coronavirus$province[coronavirus$province == ""] <- NA
# Population data
library(wpp2019)
data(pop)

keeps <- c("name","2020")
pop_2020 = pop[keeps]
names(pop_2020)[2] <- "population"
pop_2020 <- pop_2020 %>%
  mutate(name = replace(name, name == "United States of America", "United States")) %>%
  mutate(name = replace(name, name == "Iran (Islamic Republic of)", "Iran")) %>%
  mutate(name = replace(name, name == "Russian Federation", "Russia")) %>%
  mutate(name = replace(name, name == "Bolivia (Plurinational State of)", "Bolivia")) %>%
  mutate(name = replace(name, name == "Republic of Moldova", "Moldova")) %>%
  mutate(name = replace(name, name == "Venezuela (Bolivarian Republic of)", "Venezuela"))
pop_2020$population <- pop_2020$population*1000

# add population of each country
cases_pc_df <- left_join(coronavirus, pop_2020, by = c("country" = "name"))

Exploration of Cases Throughout The World

Countries With Highest Cases

Confirmed Case by Country

Death Cases by Country

Recover Cases by Country

Timeline

World Confirmed Cases Timeline

Timeline of Higest Confirmed Cases by Country

Worldmap Visualization

LS0tCnRpdGxlOiAiQ09WSUQtMTkgVmlzdWFsaXphdGlvbnMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIGNvZGVfZm9sZGluZzogaGlkZQotLS0KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMDBweDsiPjwvZGl2PgoKIyBUaGUgRGF0YQpUaGUgZGF0YSB1c2VkIGluIHRoaXMgbm90ZWJvb2sgaXMgZnJvbSB0aGUgW0NPVklELTE5IERhdGEgUmVwb3NpdG9yeSBieSB0aGUgQ2VudGVyIGZvciBTeXN0ZW1zIFNjaWVuY2UgYW5kIEVuZ2luZWVyaW5nIChDU1NFKSBhdCBKb2hucyBIb3BraW5zIFVuaXZlcnNpdHldKGh0dHBzOi8vZ2l0aHViLmNvbS9DU1NFR0lTYW5kRGF0YS9DT1ZJRC0xOSkuIFRoZSBwYWNrYWdlIHVzZWQgdG8gcmV0cmlldmUgZGF0YSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9SYW1pS3Jpc3Bpbi9jb3JvbmF2aXJ1cykuIDxicj48L2JyPgoqKkFjY2Vzc2VkIGRhdGFzZXQgb246ICoqIDIwMjAtMDgtMTEKCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KGNvcm9uYXZpcnVzKQojdXBkYXRlX2RhdGFzZXQoKQpgYGAKCjxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206NTBweDsiPjwvZGl2PgojIyMjIFByZXZpZXcgb2YgRGF0YXNldApgYGB7cn0KZGF0YSgiY29yb25hdmlydXMiKQpoZWFkKGNvcm9uYXZpcnVzKQpgYGAKCmBgYHtyfQpjb3JvbmF2aXJ1cyA8LSBjb3JvbmF2aXJ1cyAlPiUKICBtdXRhdGUoY291bnRyeSA9IHJlcGxhY2UoY291bnRyeSwgY291bnRyeSA9PSAiVVMiLCAiVW5pdGVkIFN0YXRlcyIpKQoKIyBGaWxsIGVtcHR5IHByb3ZpbmNlIHdpdGggTkEKY29yb25hdmlydXMkcHJvdmluY2VbY29yb25hdmlydXMkcHJvdmluY2UgPT0gIiJdIDwtIE5BCmBgYAoKYGBge3J9CiMgUG9wdWxhdGlvbiBkYXRhCmxpYnJhcnkod3BwMjAxOSkKZGF0YShwb3ApCgprZWVwcyA8LSBjKCJuYW1lIiwiMjAyMCIpCnBvcF8yMDIwID0gcG9wW2tlZXBzXQpuYW1lcyhwb3BfMjAyMClbMl0gPC0gInBvcHVsYXRpb24iCnBvcF8yMDIwIDwtIHBvcF8yMDIwICU+JQogIG11dGF0ZShuYW1lID0gcmVwbGFjZShuYW1lLCBuYW1lID09ICJVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EiLCAiVW5pdGVkIFN0YXRlcyIpKSAlPiUKICBtdXRhdGUobmFtZSA9IHJlcGxhY2UobmFtZSwgbmFtZSA9PSAiSXJhbiAoSXNsYW1pYyBSZXB1YmxpYyBvZikiLCAiSXJhbiIpKSAlPiUKICBtdXRhdGUobmFtZSA9IHJlcGxhY2UobmFtZSwgbmFtZSA9PSAiUnVzc2lhbiBGZWRlcmF0aW9uIiwgIlJ1c3NpYSIpKSAlPiUKICBtdXRhdGUobmFtZSA9IHJlcGxhY2UobmFtZSwgbmFtZSA9PSAiQm9saXZpYSAoUGx1cmluYXRpb25hbCBTdGF0ZSBvZikiLCAiQm9saXZpYSIpKSAlPiUKICBtdXRhdGUobmFtZSA9IHJlcGxhY2UobmFtZSwgbmFtZSA9PSAiUmVwdWJsaWMgb2YgTW9sZG92YSIsICJNb2xkb3ZhIikpICU+JQogIG11dGF0ZShuYW1lID0gcmVwbGFjZShuYW1lLCBuYW1lID09ICJWZW5lenVlbGEgKEJvbGl2YXJpYW4gUmVwdWJsaWMgb2YpIiwgIlZlbmV6dWVsYSIpKQpwb3BfMjAyMCRwb3B1bGF0aW9uIDwtIHBvcF8yMDIwJHBvcHVsYXRpb24qMTAwMAoKIyBhZGQgcG9wdWxhdGlvbiBvZiBlYWNoIGNvdW50cnkKY2FzZXNfcGNfZGYgPC0gbGVmdF9qb2luKGNvcm9uYXZpcnVzLCBwb3BfMjAyMCwgYnkgPSBjKCJjb3VudHJ5IiA9ICJuYW1lIikpCgpgYGAKCiMgRXhwbG9yYXRpb24gb2YgQ2FzZXMgVGhyb3VnaG91dCBUaGUgV29ybGQKCiMjIENvdW50cmllcyBXaXRoIEhpZ2hlc3QgQ2FzZXMKCiMjIyBDb25maXJtZWQgQ2FzZSBieSBDb3VudHJ5CgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30Kd29ybGRfY29uZmlybWVkX2Nhc2VzX2RmIDwtIGNhc2VzX3BjX2RmICU+JSAKICBmaWx0ZXIodHlwZSA9PSAiY29uZmlybWVkIikgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgbG9uZywgbGF0LCBwb3B1bGF0aW9uLCBwcm92aW5jZSkgJT4lCiAgc3VtbWFyaXNlKHRvdGFsX2Nhc2VzID0gc3VtKGNhc2VzKSkgJT4lCiAgYXJyYW5nZSgtdG90YWxfY2FzZXMpCmBgYAoKYGBge3IgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KdG9wXzEwX2NvbmZpcm1lZF9kZiA8LSB3b3JsZF9jb25maXJtZWRfY2FzZXNfZGZbMToxMCxdCgp3b3JsZF9jb25maXJtZWRfZ3JhcGggPC0KIGdncGxvdChkYXRhID0gdG9wXzEwX2NvbmZpcm1lZF9kZiwKICAgICAgICBhZXMoeCA9IHJlb3JkZXIoY291bnRyeSwgdG90YWxfY2FzZXMpLAogICAgICAgICAgICB5ID0gdG90YWxfY2FzZXMpKSArCiAgbGFicyggeCA9ICJDb3VudHJ5IiwKICAgICAgICB5ID0gIlRvdGFsIENvbmZpcm1lZCBDYXNlcyIsCiAgICAgICAgdGl0bGUgPSAiVG9wIDEwIENvdW50cmllcyBXaXRoIEhpZ2VzdCBUb3RhbCBDb25maXJtIENhc2VzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgaGp1c3QgPSAxKSkgKwogIGdlb21fY29sKGFlcyhmaWxsID0gdG90YWxfY2FzZXMpKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudDIobG93ID0gInRoaXN0bGUxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgaGlnaCA9ICJtZWRpdW1vcmNoaWQxIiwKICAgICAgICAgICAgICAgICAgICAgICBtaWRwb2ludCA9IG1lZGlhbih0b3BfMTBfY29uZmlybWVkX2RmJHRvdGFsX2Nhc2VzKSkgKwogIGdlb21fY29sKAogICAgYWVzKCB5PSA0MCksCiAgICBmaWxsID0gIndoaXRlIiwKICAgIHdpZHRoID0gMSwKICAgIGFscGhhID0gMC4yLAogICAgc2l6ZSA9IDAKICApICsKICBnZW9tX2NvbCgKICAgIGFlcyggeSA9IDIwKSwKICAgIGZpbGwgPSAid2hpdGUiLAogICAgd2lkdGggPSAxLAogICAgYWxwaGEgPSAwLjIsCiAgICBzaXplID0gMAogICkKCndvcmxkX2NvbmZpcm1lZF9ncmFwaApgYGAKCiMjIyBEZWF0aCBDYXNlcyBieSBDb3VudHJ5CgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30Kd29ybGRfZGVhdGhfY2FzZXNfZGYgPC0gY29yb25hdmlydXMgJT4lIAogIGZpbHRlcih0eXBlID09ICJkZWF0aCIpICU+JQogIGdyb3VwX2J5KGNvdW50cnksIGxvbmcsIGxhdCwgcHJvdmluY2UpICU+JQogIHN1bW1hcmlzZSh0b3RhbF9kZWF0aHMgPSBzdW0oY2FzZXMpKSAlPiUKICBhcnJhbmdlKC10b3RhbF9kZWF0aHMpCgp0b3BfMTBfZGVhdGhfZGYgPC0gd29ybGRfZGVhdGhfY2FzZXNfZGZbMToxMCxdCgp3b3JsZF9kZWF0aF9ncmFwaCA8LQogZ2dwbG90KGRhdGEgPSB0b3BfMTBfZGVhdGhfZGYsIGFlcyh4ID0gcmVvcmRlcihjb3VudHJ5LCB0b3RhbF9kZWF0aHMpLCB5ID0gdG90YWxfZGVhdGhzKSkgKwogIGdlb21fY29sKGFlcyhmaWxsID0gdG90YWxfZGVhdGhzKSkgKwogICAgbGFicyggeCA9ICJDb3VudHJ5IiwKICAgICAgICB5ID0gIlRvdGFsIERlYXRoIENhc2VzIiwKICAgICAgICB0aXRsZSA9ICJUb3AgMTAgQ291bnRyaWVzIFdpdGggSGlnZXN0IERlYXRoIENhc2VzIikgKwogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgaGp1c3QgPSAxKSkgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQyKGxvdyA9ICJyZWQiLCAKICAgICAgICAgICAgICAgICAgICAgICBoaWdoID0gInJlZDQiLAogICAgICAgICAgICAgICAgICAgICAgIG1pZHBvaW50ID0gbWVkaWFuKHRvcF8xMF9kZWF0aF9kZiR0b3RhbF9kZWF0aHMpKSArCiAgZ2VvbV9jb2woCiAgICBhZXMoIHk9IDQwKSwKICAgIGZpbGwgPSAid2hpdGUiLAogICAgd2lkdGggPSAxLAogICAgYWxwaGEgPSAwLjIsCiAgICBzaXplID0gMAogICkgKwogIGdlb21fY29sKAogICAgYWVzKCB5ID0gMjApLAogICAgZmlsbCA9ICJ3aGl0ZSIsCiAgICB3aWR0aCA9IDEsCiAgICBhbHBoYSA9IDAuMiwKICAgIHNpemUgPSAwCiAgKQoKd29ybGRfZGVhdGhfZ3JhcGgKYGBgCgojIyMgUmVjb3ZlciBDYXNlcyBieSBDb3VudHJ5CgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30Kd29ybGRfcmVjb3ZlcmVkX2Nhc2VzX2RmIDwtIGNvcm9uYXZpcnVzICU+JSAKICBmaWx0ZXIodHlwZSA9PSAicmVjb3ZlcmVkIikgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgbG9uZywgbGF0LCBwcm92aW5jZSkgJT4lCiAgc3VtbWFyaXNlKHRvdGFsX3JlY292ZXJlZCA9IHN1bShjYXNlcykpICU+JQogIGFycmFuZ2UoLXRvdGFsX3JlY292ZXJlZCkKCnRvcF8xMF9yZWNvdmVyZWRfZGYgPC0gd29ybGRfcmVjb3ZlcmVkX2Nhc2VzX2RmWzE6MTAsXQoKd29ybGRfcmVjb3Zlcl9ncmFwaCA8LQogZ2dwbG90KGRhdGEgPSB0b3BfMTBfcmVjb3ZlcmVkX2RmLAogICAgICAgIGFlcyh4ID0gcmVvcmRlcihjb3VudHJ5LCB0b3RhbF9yZWNvdmVyZWQpLAogICAgICAgICAgICB5ID0gdG90YWxfcmVjb3ZlcmVkKSkgKwogIGdlb21fY29sKGFlcyhmaWxsID0gdG90YWxfcmVjb3ZlcmVkKSkgKwogICAgbGFicyggeCA9ICJDb3VudHJ5IiwKICAgICAgICB5ID0gIlRvdGFsIFJlY292ZXJlZCBDYXNlcyIsCiAgICAgICAgdGl0bGUgPSAiVG9wIDEwIENvdW50cmllcyBXaXRoIEhpZ2VzdCBUb3RhbCBSZWNvdmVyZWQgQ2FzZXMiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgdmp1c3QgPSAxLCBoanVzdCA9IDEpKSArCiAgc2NhbGVfZmlsbF9ncmFkaWVudDIobG93ID0gImdyZWVuIiwgCiAgICAgICAgICAgICAgICAgICAgICAgaGlnaCA9ICJncmVlbjQiLAogICAgICAgICAgICAgICAgICAgICAgIG1pZHBvaW50ID0gbWVkaWFuKHRvcF8xMF9yZWNvdmVyZWRfZGYkdG90YWxfcmVjb3ZlcmVkKSkgKwogIGdlb21fY29sKAogICAgYWVzKCB5PSA0MCksCiAgICBmaWxsID0gIndoaXRlIiwKICAgIHdpZHRoID0gMSwKICAgIGFscGhhID0gMC4yLAogICAgc2l6ZSA9IDAKICApICsKICBnZW9tX2NvbCgKICAgIGFlcyggeSA9IDIwKSwKICAgIGZpbGwgPSAid2hpdGUiLAogICAgd2lkdGggPSAxLAogICAgYWxwaGEgPSAwLjIsCiAgICBzaXplID0gMAogICkKCndvcmxkX3JlY292ZXJfZ3JhcGgKYGBgCgojIyBUaW1lbGluZQoKIyMjIFdvcmxkIENvbmZpcm1lZCBDYXNlcyBUaW1lbGluZQpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30Kd29ybGRfY2FzZXNfYnlfZGF0ZV9kZiA8LSBjb3JvbmF2aXJ1cyAlPiUgCiAgZmlsdGVyKHR5cGUgPT0gImNvbmZpcm1lZCIpICU+JQogIGdyb3VwX2J5KGRhdGUpICU+JQogIHN1bW1hcmlzZSh0b3RhbF9jYXNlcyA9IHN1bShjYXNlcykpICU+JQogIGFycmFuZ2UoLXRvdGFsX2Nhc2VzKQoKZ2dwbG90KHdvcmxkX2Nhc2VzX2J5X2RhdGVfZGYsIGFlcyhkYXRlLCB0b3RhbF9jYXNlcykpICsKICBnZW9tX2xpbmUoKSArCiAgbGFicyh4ID0gIk1vbnRoIiwKICAgICAgIHkgPSAiQ2FzZXMiLAogICAgICAgdGl0bGUgPSJDdW11bGF0aXZlIENvbmZpcm1lZCBDYXNlcyBXb3JsZHdpZGUiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9ZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKwogIHNjYWxlX3hfZGF0ZShsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJWIiKSwgZGF0ZV9icmVha3MgPSAiMSBtb250aCIpCmBgYAoKIyMjIFRpbWVsaW5lIG9mIEhpZ2VzdCBDb25maXJtZWQgQ2FzZXMgYnkgQ291bnRyeQpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KIyBMaXN0IG9mIGNvdW50cmllcyB0byBpbmNsdWRlIGluIHRoZSBncmFwaApjb3VudHJ5X2xpc3QgPC0gYygiVW5pdGVkIFN0YXRlcyIsICJCcmF6aWwiLCAiSW5kaWEiLCAiUnVzc2lhIiwgIk1leGljbyIsICJDaGluYSIsICJDYW5hZGEiKQoKdG9wX2NvdW50cnlfZGYgPC0gY2FzZXNfcGNfZGYgJT4lIAogIGZpbHRlcihjb3VudHJ5ICVpbiUgY291bnRyeV9saXN0KSAlPiUKICBmaWx0ZXIodHlwZSA9PSAiY29uZmlybWVkIikgJT4lCiAgZ3JvdXBfYnkoZGF0ZSwgY291bnRyeSwgcG9wdWxhdGlvbikgJT4lCiAgc3VtbWFyaXNlKHRvdGFsX2Nhc2VzID0gc3VtKGNhc2VzKSkgJT4lCiAgYXJyYW5nZSgtdG90YWxfY2FzZXMpCgp0b3RhbF9jYXNlcyA8LSB0b3BfY291bnRyeV9kZiR0b3RhbF9jYXNlcwpwb3B1bGF0aW9uIDwtIHRvcF9jb3VudHJ5X2RmJHBvcHVsYXRpb24KdG9wX2NvdW50cnlfZGYkYFRvdGFsIENhc2VzYCA8LSB0b3RhbF9jYXNlcyoxMDAwMDAwL3BvcHVsYXRpb24KCiMgZHJhdyBhIGxpbmUgcGxvdCBvZiB0b3RhbF9jYXNlcyB2cy4gZGF0ZSwgZ3JvdXBlZCBhbmQgY29sb3JlZCBieSBjb3VudHJ5CmcgPC0gZ2dwbG90KGRhdGEgPSB0b3BfY291bnRyeV9kZiwKICAgICAgICAgICAgYWVzKHggPSBkYXRlLAogICAgICAgICAgICAgICAgeSA9IGBUb3RhbCBDYXNlc2AsCiAgICAgICAgICAgICAgICBjb2xvciA9IGNvdW50cnksCiAgICAgICAgICAgICAgICBncm91cCA9IGNvdW50cnkpKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnMoeD0gIk1vbnRoIiwKICAgICAgIHk9IiBEYWlseSBDb25maXJtZWQgQ2FzZXMgcGVyIE1pbGxpb24gUGVvcGxlIiwKICAgICAgIHRpdGxlID0gIkRhaWx5IENvbmZpcm1lZCBDYXNlcyBieSBDb3VudHJ5ICgyMDIwKSIpICsKICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkgKwogIHNjYWxlX3hfZGF0ZShsYWJlbHMgPSBkYXRlX2Zvcm1hdCgiJWIiKSwgZGF0ZV9icmVha3MgID0iMSBtb250aCIpCgpnZ2x5IDwtIGdncGxvdGx5KHAgPSBnLAogICAgICAgICAgICAgICAgIHdpZHRoID0gMTAwMCwKICAgICAgICAgICAgICAgICBoZWlnaHQgPSA3MDAsCiAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IGMoImRhdGUiLCAiVG90YWwgQ2FzZXMiLCAiZ3JvdXAiKSkKCmdnbHkKYGBgCgoKCiMgV29ybGRtYXAgVmlzdWFsaXphdGlvbgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KIyBMb2FkIHBhY2thZ2VzIGFuZCB3b3JsZCBtYXAgZGF0YQpsaWJyYXJ5KHNmKQpsaWJyYXJ5KHRtYXApCmxpYnJhcnkoc3BEYXRhKQpsaWJyYXJ5KHZpcmlkaXMpCmxpYnJhcnkocm5hdHVyYWxlYXJ0aCkKCndvcmxkIDwtbWFwX2RhdGEoIndvcmxkIikKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KYnJlYWtzPC0gYygxLCAzMCwgMTAwLCAxMDAwLCA1MDAwMCwgMTAwMDAwKQpsYWJlbHM8LSBjKCIxLTI5IiwgIjIwLTk5IiwgIjEwMC05OTkiLCIxLDAwMC00OSw5OTkiLCAiNTAsMDAwLTQ5OSw5OTkiLCAiMTAwLDAwMCsiKQoKY29uZmlybV9tYXAgPC0gZ2dwbG90KCkgKwogIGdlb21fcG9seWdvbihkYXRhID0gd29ybGQsCiAgICAgICAgICAgICAgIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCksCiAgICAgICAgICAgICAgIGZpbGwgPSAiZ3JleSIsIGFscGhhID0gMC4zKSArCiAgZ2VvbV9wb2ludChkYXRhID0gd29ybGRfY29uZmlybWVkX2Nhc2VzX2RmLAogICAgICAgICAgICAgYWVzKHggPSBsb25nLAogICAgICAgICAgICAgICAgIHkgPSBsYXQsCiAgICAgICAgICAgICAgICAgc2l6ZSA9IHRvdGFsX2Nhc2VzLAogICAgICAgICAgICAgICAgIGNvbG9yID0gdG90YWxfY2FzZXMsCiAgICAgICAgICAgICAgICAgdGV4dF9jb3VudHJ5ID0gY291bnRyeSwKICAgICAgICAgICAgICAgICB0ZXh0X3Byb3ZpbmNlID0gcHJvdmluY2UsCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlKCJEZWF0aHM6ICIsIHRvdGFsX2Nhc2VzKSksCiAgICAgICAgICAgICBhbHBoYSA9IDAuNSkgKwogIHNjYWxlX3NpemVfY29udGludW91cyhuYW1lID0gIkNvbmZpcm1lZCBjYXNlcyIsIHRyYW5zPSJsb2ciLCByYW5nZT1jKDEsOCksCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGJyZWFrcyxsYWJlbHM9bGFiZWxzKSArCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXNfYyhvcHRpb24gPSAicGxhc21hIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJDb25maXJtZWQgY2FzZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGJyZWFrcywKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxhYmVscykgKwogIGd1aWRlcyhjb2xvdXI9Z3VpZGVfbGVnZW5kKCkpICsgCiAgdGhlbWVfdm9pZCgpICsKICBsYWJzKHRpdGxlID0gIk1hcCBvZiBDb25maXJtZWQgQ2FzZXMiKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJib3R0b20iLAogICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKY29uZmlybV9tYXBfcGxvdGx5IDwtIGdncGxvdGx5KHAgPSBjb25maXJtX21hcCwKICAgICAgICAgICAgICAgICB3aWR0aCA9IDEwMDAsCiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gNzAwLAogICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBjKCJ0ZXh0X2NvdW50cnkiLCAidGV4dF9wcm92aW5jZSIsICJ0ZXh0IikpCgpjb25maXJtX21hcF9wbG90bHkKYGBgCgoKYGBge3IgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CmJyZWFrczwtIGMoMSwgMzAsIDEwMCwgMTAwMCwgNTAwMDAsIDEwMDAwMCkKbGFiZWxzPC0gYygiMS0yOSIsICIyMC05OSIsICIxMDAtOTk5IiwiMSwwMDAtNDksOTk5IiwgIjUwLDAwMC00OTksOTk5IiwgIjEwMCwwMDArIikKCmRlYXRoX21hcCA8LSBnZ3Bsb3QoKSArCiAgZ2VvbV9wb2x5Z29uKGRhdGEgPSB3b3JsZCwKICAgICAgICAgICAgICAgYWVzKHggPSBsb25nLCB5ID0gbGF0LCBncm91cCA9IGdyb3VwKSwKICAgICAgICAgICAgICAgZmlsbCA9ICJncmV5IiwgYWxwaGEgPSAwLjMpICsKICBnZW9tX3BvaW50KGRhdGEgPSB3b3JsZF9kZWF0aF9jYXNlc19kZiwKICAgICAgICAgICAgIGFlcyh4ID0gbG9uZywKICAgICAgICAgICAgICAgICB5ID0gbGF0LAogICAgICAgICAgICAgICAgIHNpemUgPSB0b3RhbF9kZWF0aHMsCiAgICAgICAgICAgICAgICAgY29sb3IgPSB0b3RhbF9kZWF0aHMsCiAgICAgICAgICAgICAgICAgdGV4dF9jb3VudHJ5ID0gY291bnRyeSwKICAgICAgICAgICAgICAgICB0ZXh0X3Byb3ZpbmNlID0gcHJvdmluY2UsCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlKCJEZWF0aHM6ICIsIHRvdGFsX2RlYXRocykpLAogICAgICAgICAgICAgYWxwaGEgPSAwLjUpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobmFtZSA9ICJEZWF0aCBjYXNlcyIsIHRyYW5zPSJsb2ciLCByYW5nZT1jKDEsOCksCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGJyZWFrcyxsYWJlbHM9bGFiZWxzKSArCiAgc2NhbGVfY29sb3VyX3ZpcmlkaXNfYyhvcHRpb24gPSAiaW5mZXJubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiRGVhdGggY2FzZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnMgPSAibG9nIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGJyZWFrcywKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGxhYmVscykgKwogIGd1aWRlcyhjb2xvdXI9Z3VpZGVfbGVnZW5kKCkpICsgCiAgdGhlbWVfdm9pZCgpICsKICBsYWJzKHRpdGxlID0gIk1hcCBvZiBEZWF0aCBDYXNlcyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpkZWF0aF9tYXBfcGxvdGx5IDwtIGdncGxvdGx5KHAgPSBkZWF0aF9tYXAsCiAgICAgICAgICAgICAgICAgd2lkdGggPSAxMDAwLAogICAgICAgICAgICAgICAgIGhlaWdodCA9IDcwMCwKICAgICAgICAgICAgICAgICB0b29sdGlwID0gYygidGV4dF9jb3VudHJ5IiwgInRleHRfcHJvdmluY2UiLCAidGV4dCIpKQoKZGVhdGhfbWFwX3Bsb3RseQoKYGBgCgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KYnJlYWtzPC0gYygwLCAzMCwgMTAwLCAxMDAwLCA1MDAwMCwgMTAwMDAwKQpsYWJlbHM8LSBjKCIwIiwgIjEtMjkiLCAiMjAtOTkiLCAiMTAwLTk5OSIsIjEsMDAwLTQ5LDk5OSIsICI1MCwwMDArIikKCnJlY292ZXJfbWFwIDwtIGdncGxvdCgpICsKICBnZW9tX3BvbHlnb24oZGF0YSA9IHdvcmxkLAogICAgICAgICAgICAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsZ3JvdXAgPSBncm91cCksCiAgICAgICAgICAgICAgIGZpbGwgPSAiZ3JleSIsIGFscGhhID0gMC4zKSArCiAgZ2VvbV9wb2ludChkYXRhID0gd29ybGRfcmVjb3ZlcmVkX2Nhc2VzX2RmLAogICAgICAgICAgICAgYWVzKHggPSBsb25nLAogICAgICAgICAgICAgICAgIHkgPSBsYXQsCiAgICAgICAgICAgICAgICAgc2l6ZSA9IHRvdGFsX3JlY292ZXJlZCwKICAgICAgICAgICAgICAgICBjb2xvcj10b3RhbF9yZWNvdmVyZWQsCiAgICAgICAgICAgICAgICAgdGV4dF9jb3VudHJ5ID0gY291bnRyeSwKICAgICAgICAgICAgICAgICB0ZXh0X3Byb3ZpbmNlID0gcHJvdmluY2UsCiAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlKCJSZWNvdmVyZWQ6ICIsIHRvdGFsX3JlY292ZXJlZCkpLAogICAgICAgICAgICAgYWxwaGEgPSAwLjUpICsKICBzY2FsZV9zaXplX2NvbnRpbnVvdXMobmFtZSA9ICJSZWNvdmVyZWQgY2FzZXMiLCB0cmFucz0ibG9nIiwgcmFuZ2U9YygxLDgpLAogICAgICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBicmVha3MsbGFiZWxzPWxhYmVscykgKwogIHNjYWxlX2NvbG91cl92aXJpZGlzX2Mob3B0aW9uID0gInZpcmlkaXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gIlJlY292ZXJlZCBjYXNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFucyA9ICJsb2ciLAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYnJlYWtzLAogICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gbGFiZWxzKSArCiAgZ3VpZGVzKGNvbG91cj1ndWlkZV9sZWdlbmQoKSkgKyAKICB0aGVtZV92b2lkKCkgKwogIGxhYnModGl0bGUgPSAiTWFwIG9mIFJlY292ZXJlZCBDYXNlcyIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249ImJvdHRvbSIsCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCgpyZWNvdmVyX21hcF9wbG90bHkgPC0gZ2dwbG90bHkocCA9IHJlY292ZXJfbWFwLAogICAgICAgICAgICAgICAgIHdpZHRoID0gMTAwMCwKICAgICAgICAgICAgICAgICBoZWlnaHQgPSA3MDAsCiAgICAgICAgICAgICAgICAgdG9vbHRpcCA9IGMoInRleHRfY291bnRyeSIsICJ0ZXh0X3Byb3ZpbmNlIiwgInRleHQiKSkKCnJlY292ZXJfbWFwX3Bsb3RseQpgYGAKCgo=